Tensorflow笔记|tensorflow做线性回归
本系列推送主要参考: Stanford University CS20SI: Tensorflow for Deep Learning Research.
01
—
Tensorflow做线性回归
前面实现过最小二乘法的线性回归算法,梯度下降求解过程,详见文章:
那么,借助tensorflow如何实现最小二乘法的线性回归呢?基本的思路,首先生成拟合的数据集,然后构建线性回归的Graph,最后在Session中迭代train器,得到拟合的参数w和b,画出拟合曲线。
1.1 生成拟合的数据集,数据集只含有一个特征,注意误差项需要满足高斯分布,其分布的代码如下,首先导入3个库,
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
#数据点100个
num_points = 100
vectors_set = []
for i in range(num_points):
x1 = np.random.normal(0.,0.55)
y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0,0.03)
vectors_set.append([x1,y1])
#特征x
x_data = [v[0] for v in vectors_set]
#标签值y
y_data = [v[1] for v in vectors_set]
plt.scatter(x_data,y_data,c='b')
plt.show()
产生的数据分布如下所示:
1.2 构建线性回归的Graph
w = tf.Variable(tf.random_uniform([1],-1.,1.),name='myw')
b = tf.Variable(tf.zeros([1]),name='myb')
#经过计算得出预估值
y = w * x_data + b
#以预估值y和实际值y_data之间的均方差作为损失
loss = tf.reduce_mean(tf.square(y-y_data,name='mysquare'), name='myloss')
#采用梯度下降法来优化参数
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss,name='mytrain')
1.3 在Session中运行构建好的Graph
#global_variables_initializer初始化Variable等变量
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))
#迭代20次train
for step in range(20):
sess.run(train)
print("w=", sess.run(w),"b=",sess.run(b),sess.run(loss))
#写入磁盘,提供tensorboard在浏览器中展示用
writer = tf.summary.FileWriter("./mytmp",sess.graph)
打印下w和b,损失值的变化情况,可以看到损失值从0.24降到0.0008.
1.4绘制拟合曲线
plt.scatter(x_data,y_data,c='b')
plt.plot(x_data,sess.run(w)*x_data+sess.run(b))
plt.show()
02
—
Tensorboard展示Graph
关于如何在tensorboard中展示构建好的Graph,请参考文章,不再赘述,直接分析tensorflow绘制的graph.
得到的Graph界面如下所示:
Main Graph视图放大版,数据从底部是如何经过Operators,流动到顶部的,大家可以顺一下。
以上就是在tensorflow中做基本的线性回归的基本步骤,利用这个最基本的任务,先体会下tensorflow做回归的过程。
以上完整源码,请点击下方“阅读原文”按钮。
TensorFlow的参考书:
TensorFlow for Machine Intelligence (TFFMI)
Hands-On Machine Learning with Scikit-Learn and TensorFlow. Chapter 9: Up and running with TensorFlow
Fundamentals of Deep Learning. Chapter 3: Implementing Neural Networks in TensorFlow (FODL)
算法channel会有系统地,认真地推送:机器学习(包含深度学习,强化学习等)的理论,算法,实践,源码实现。期待您的参与!